home *** CD-ROM | disk | FTP | other *** search
Wrap
/*////////////////////////////////////////////////////////////////////// filename: options.js copyright(c): 2002, 2003 Tiny Software Inc (http://www.tinysoftware.com) author: Jozef Palocko (jpalocko@tinysoftware.com) product: Tiny Personal Firewall 5.x description: options implementation ///////////////////////////////////////////////////////////////////////*/ var ERR_GET_MODULE_PARSER = "Error: Cannot get Parser object for module"; var arrOptions = new Array(); var arrParser = new Array(); var iRoutedPortListEnabled = true; var bIsAdmin = window.external.IsAdmin; var strDisabled = (!bIsAdmin || window.external.Managed == 1 && window.external.Context == 0) ? "disabled" : ""; var arrProtos = new Array( "UDP4", "UDP6", "TCP4", "TCP6" ); var arrProtoDescription = new Array(); var arrCombos, arrLinks, arrExtPortEdits, arrIntPortEdits, arrServerAddrChks, arrServerAddrs; var idCreateButton = ''; var HTML_ICO_MINUS = '<IMG src="ico-minus.gif" alt="Delete row"/>'; var PROPID_ROUTEDPORTLIST = 'RoutedPortList', PROPID_STEALTHMODE = 'PreventClosedPortAccess', PROPID_NATPROCESSINGEN = 'NatProcessingEn'; var PT_INT = 1, PT_STR = 0; var strBuild = window.external.Build; var arrBuildNumbers = new Array("", "", "", ""); arrBuildNumbers = strBuild.split("."); var bNatIfaceEnabled = (window.external.StringProperty("fw-nat-options") != "" || parseInt(arrBuildNumbers[1]) >= 6); var ID_ROUTEDPORTLIST = "id_listRoutedPorts"; var STR_PROTO = "Protocol", STR_EXT = "External Port#", STR_INT = "Internal Port#", STR_FTPCONTROL = "FTP Control Port", STR_FTPIPADDR = "FTP Server IP Address"; function OnLoad() { fw.innerHTML = GetModuleOptionsStr(2); sbx.innerHTML = GetModuleOptionsStr(1); //ids.innerHTML = GetModuleOptionsStr(16); } function OptionsInit() { var i = 0; for (i = 1; i <= 2; i++) arrParser[i] = window.external.ServerParser(i) ; arrProtoDescription["UDP4"] = "UDP v4"; arrProtoDescription["UDP6"] = "UDP v6"; arrProtoDescription["TCP4"] = "TCP v4"; arrProtoDescription["TCP6"] = "TCP v6"; } function GetModuleOptionsStr(ModuleID, bNatFwOptions) { var Option, OptList, strOptions, Parser = null; Parser = arrParser[ModuleID]; if (Parser == null) { return ""; } strOptions =""; OptList = new Enumerator(Parser.GlobalOptions); if (bNatFwOptions) { strOptions += GetNatProcessingEnabled(null); strOptions += GetRoutedPortList(null); return strOptions; } for (;!OptList.atEnd();OptList.moveNext()) { //add option to array var prop = OptList.item(); arrOptions[arrOptions.length] = prop; var strNewOption = ""; if (prop.PropertyID != PROPID_NATPROCESSINGEN && prop.PropertyID != PROPID_STEALTHMODE && prop.PropertyID != PROPID_ROUTEDPORTLIST) strNewOption = GetOptionStr(OptList.item(), ModuleID, bNatFwOptions); strOptions += strNewOption; } return strOptions; } //applies changes to parser function OnChange(Ctrl, ModuleID) { var Parser = arrParser[ModuleID]; OptionList = Parser.GlobalOptions; var OptionID, oOption, Value; OptionID = Ctrl.name; if (OptionID == "UnkAppStartDlg" || OptionID == "UnkSysAppStartDlg" || OptionID == "GuardSystemProcesses") Value = Ctrl.checked?1:0; else Value = Ctrl.options[Ctrl.selectedIndex].value; oOption = OptionList.Get(OptionID); if (oOption) { oOption.Value = parseInt(Value); } } //return ful tag string for one parser option function GetOptionStr(Option, ModuleID, bNatFwOptions) { var strOption=""; var strOptionID = Option.PropertyID; switch(strOptionID) { case "SafeToInjectDllGroup": break; case "GuardSystemProcesses": break; // this option is disabled case "UnkAppStartDlg": //checkbox if (!bNatFwOptions) strOption = GetCheckBoxHtml(Option, ModuleID); break; case "UnkSysAppStartDlg": //checkbox if (!bNatFwOptions) strOption = GetCheckBoxHtml(Option, ModuleID); break; case "PreventClosedPortAccess": //custom combo if (!bNatFwOptions && !bNatIfaceEnabled) strOption = GetPreventClosedPortAccessHtml(Option, ModuleID); break; default: //Audit levels // if (!bNatFwOptions && (strOptionID != "ClosedPortAccessAL" | !bNatIfaceEnabled)) // { strOption = GetALComboHtml(Option, ModuleID); // } break; } return strOption; } function GetCheckBoxHtml(Option, ModuleID) { var strCode; var Val =""; if (Option.Value == 1) Val = "CHECKED"; strCode = '<p align="left"><input type="checkbox" '+ Val + ' name="' + Option.PropertyID; strCode += '"onclick="OnChange(this,'+ ModuleID+')" ' + strDisabled + '> ' + GetDisplayStr(Option.PropertyID) +'</p>'; return strCode; } function GetPreventClosedPortAccessHtml(Option, ModuleID) { var strCode = ""; strCode += '<table><tr><td width="200">'+GetDisplayStr(Option.PropertyID)+'</td><td align="right">'; strCode += '<select name="'+ Option.PropertyID+'" OnChange = "OnChange(this,'+ ModuleID+')" ' + strDisabled + '>'; strCode += '<OPTION value=0 '+ (Option.Value==0?'SELECTED':'') +'>Disable</OPTION>'; strCode += '<OPTION value=1 '+ (Option.Value==1?'SELECTED':'') +'>Enable</OPTION>'; strCode += '<OPTION value=2 '+ (Option.Value==2?'SELECTED':'') +'>Enable For NAT (ICS)</OPTION>'; strCode += '</select></td></tr></table>'; return strCode; } function GetALComboHtml(Option, ModuleID) { // if (!bNatFwOptions && !bNatIfaceEnabled) strCode = '<table><tr><td width="200">'+GetDisplayStr(Option.PropertyID)+'</td><td align="right">'; strCode += '<select name="'+ Option.PropertyID+'" OnChange = "OnChange(this,'+ ModuleID+')" ' + strDisabled + '>'; strCode += '<OPTION value=0 '+ (Option.Value==0?'SELECTED':'') +'>Do Not Monitor</OPTION>'; strCode += '<OPTION value=1 '+ (Option.Value==1?'SELECTED':'') +'>Monitor</OPTION>'; // strCode += '<OPTION value=2 '+ (Option.Value==2?'SELECTED':'') +'>Alert</OPTION>; // not currently supported strCode += '</select></td></tr></table>'; return strCode; } function GetDisplayStr(PropID) { var DisplayStr = PropID; switch(PropID) { case "SBXChangeSecurityAL": DisplayStr = "Windows Security Engine Status";break; case "StartProcessAL": DisplayStr = "Start process audit level";break; case "EndProcessAL": DisplayStr = "End process audit level";break; case "ChangeConditionAL": DisplayStr = "Change condition audit level";break; case "ChangeProcConditionAL": DisplayStr = "Change process condition audit level";break; case "UnkAppStartDlg": DisplayStr = "Alert when unknown application starts";break; case "UnkSysAppStartDlg": DisplayStr = "Alert when unknown system application starts";break; case "FWChangeSecurityAL": DisplayStr = "Network Security Engine Status";break; case "PreventClosedPortAccess": DisplayStr = "Stealth Mode";break; case "ClosedPortAccessAL": DisplayStr = "Closed Port Access";break; case "GuardSystemProcesses": DisplayStr = "Guard system processes"; break; case "NatProcessingEn": DisplayStr = "NAT/ICS processing enabled"; break; case "RoutedPortList": DisplayStr = "List of port numbers corresponding to the services running on your network that Internet users can access"; break; } return DisplayStr; } function GetNatProcessingEnabled(Option) { var OptionList = null, oOption = Option; if (null == oOption) { var Parser = arrParser[2]; OptionList = Parser.GlobalOptions; try { oOption = OptionList.Get(PROPID_NATPROCESSINGEN); } catch (e) { } } var strCode = '<table><tr><td width="200"><strong>'+GetDisplayStr(PROPID_NATPROCESSINGEN)+'</strong></td><td align="right">'; if (null != oOption) iRoutedPortListEnabled = oOption.value; else iRoutedPortListEnabled = false; var elemPortList = null; elemPortList = document.all[ID_ROUTEDPORTLIST]; if (null != elemPortList) elemPortList.disabled = !iRoutedPortListEnabled; strCode += '<input type="checkbox" ' + (iRoutedPortListEnabled ? "checked" : "") + ' onclick="EnableRoutedPortList(this.checked);"></input>'; strCode += '</td></tr></table>'; return strCode; } function EnableListGtws() { if (listGtws.controlWindow) { listGtws.EnableWindow(bIsAdmin && iRoutedPortListEnabled); } else setTimeout("EnableListGtws()", 30); } function GetProtoComboBox( strProto, index ) { var strCode = ''; strCode += '<SELECT id="combo_' + index + '" onchange="EnableServerAddr(' + index + ', this.selectedIndex);Save();"'; if (!iRoutedPortListEnabled) strCode += ' disabled'; strCode += '>'; arrCombos[index] = "combo_" + index; var i = 0; for (i = 0; i < arrProtos.length; i++) { strCode += '<OPTION value="' + arrProtos[i] + '"'; if (strProto == arrProtos[i]) strCode += ' selected'; strCode += '>' + arrProtoDescription[arrProtos[i]] + '</OPTION>'; } strCode += '</SELECT>'; return strCode; } function portNoOk(elem) { var iPortNo = parseInt(elem.value); if (isNaN(iPortNo) || iPortNo < 1 || iPortNo > 65535) { alert('Value "' + elem.value + '" is not a valid port number. Please enter a number in the range <1, 65535>.'); elem.value = elem.or_value; return false; } return true; } function ipAddOk(elem) { var iAddr = elem.value; var arrComp = iAddr.split('.'); var bSuccess = true; if (arrComp.length == 4) { for (var i = 0; i < 4; i++) { var iComp = parseInt(arrComp[i]); if (isNaN(iComp)) { bSuccess = false; break; } } } else bSuccess = false; if (!bSuccess) { alert('Value "' + elem.value + '" does not seem as a valid IP address. Please try again.'); elem.value = elem.or_value; } return bSuccess; } function EnableServerAddr(index, protoIndex) { var strElemChk = 'chk_' + index; var strElemAddr = 'addr_' + index; var elemChk = document.all[strElemChk], elemAddr = document.all[strElemAddr]; if (protoIndex == 2) { elemChk.disabled = false; elemAddr.disabled = false; } else { elemChk.disabled = true; elemAddr.disabled = true; } } function GetPortEdit( strExtInt, strValue, index ) { var strId = strExtInt + 'port_' + index; if (strExtInt == "ext") arrExtPortEdits[index] = strId; else arrIntPortEdits[index] = strId; var strCode = '<input type=edit id="' + strId + '" value="' + strValue + '" onblur="if(portNoOk(this)) Save();" onfocus="this.or_value = this.value"; onchange="if(portNoOk(this)) Save();"'; if (!iRoutedPortListEnabled) strCode += ' disabled'; strCode += '></input>'; return strCode; } function GetDeleteLink( index ) { var strCode = ''; strCode += '<A href="#" id="'; var strIdLink = "link_" + index; arrLinks[index] = strIdLink; strCode += strIdLink + '"'; strCode += ' onclick="OnDelete(' + index + ')"'; if (!iRoutedPortListEnabled) strCode += ' disabled'; strCode += '>' + HTML_ICO_MINUS + '</A>'; return strCode; } function GetCreateButton( ) { var strCode = ''; idCreateButton = "button_create"; strCode += '<input type=button id="' + idCreateButton + '" value="Add Row" onclick="OnAddRow();"'; if (!iRoutedPortListEnabled) strCode += ' disabled'; strCode += '></input>'; return strCode; } function GetRoutedPortList(Option) { var strDisabled = (iRoutedPortListEnabled && bIsAdmin ? '' : 'disabled'); var strCode = '<table style="margin-top:15pt;"><tr><td colspan="2"><strong>' + GetDisplayStr(PROPID_ROUTEDPORTLIST)+ '<strong></td></tr><tr><td align="left">'; strCode += '<div id=div_table>'; strCode += GetRoutedPortListTable(Option); strCode += '</div>'; strCode += '</td></tr>'; strCode += '<tr><td align="left">' + GetCreateButton() + '</td></tr></table>'; return strCode; } function GetServerAddrChk( strId, strAddr, bState, bDisabled, index ) { var strChkId = strId + '_' + index; var strOpt = '<input type="checkbox" id="' + strChkId + '"'; arrServerAddrChks[index] = strChkId; if (bState) strOpt += ' checked'; if (bDisabled || !iRoutedPortListEnabled) strOpt += ' disabled'; strOpt += ' onclick="' + strAddr + '_' + index + '.disabled = !this.checked;Save();"></input>'; return strOpt; } function GetServerAddrEdit( strId, strAddr, bDisabled, index ) { var strEditId = strId + '_' + index; strRet = '<input type="edit" id="' + strEditId + '" value="' + strAddr + '"'; if (bDisabled || !iRoutedPortListEnabled) strRet += ' disabled'; strRet += ' onblur="if(ipAddOk(this)) Save();" onfocus="this.or_value = this.value"; onchange="if(ipAddOk(this)) Save();" ' + (strAddr == "" ? "disabled" : "") + '></input>'; arrServerAddrs[index] = strEditId; return strRet; } function GetRoutedPortListTable(Option) { var Parser = arrParser[2], oOption = Option, OptionList = null; if (oOption == null) { OptionList = Parser.GlobalOptions; try { oOption = OptionList.Get(PROPID_ROUTEDPORTLIST); } catch (e) { } } var strCode = '<table style="margin-top: 10pt;" cellspacing="0" cellpadding="10" border="1" bordercolor="#000000" id="' + ID_ROUTEDPORTLIST + '" ' + strDisabled + '>'; strCode += '<tr><td><strong>' + STR_PROTO + '</strong></td><td><strong>' + STR_EXT + '</strong></td><td><strong>' + STR_INT + '</strong></td><td><strong>' + STR_FTPCONTROL + '</strong></td><td><strong>' + STR_FTPIPADDR + '</strong></td></tr>' arrCombos = new Array(); arrLinks = new Array(); arrExtPortEdits = new Array(); arrIntPortEdits = new Array(); arrServerAddrChks = new Array(); arrServerAddrs = new Array(); if (null != oOption) { var value = oOption.value; var arrCouples = new Array; if (null != value) arrCouples = oOption.value.split(','); var i = 0, n = arrCouples.length; for (i = 0; i < n; i++) { try { var strSingleRoute = arrCouples[i]; var strAux0 = strSingleRoute.split("@"); var strAddr = ""; if (strAux0.length > 1) strAddr = strAux0[1]; var arrAux1 = strAux0[0].split(":"); var strProto = arrAux1[0]; var arrPorts = arrAux1[1].split("/"); var strPortExt = arrPorts[0], strPortInt = arrPorts[1]; strCode += '<tr>'; strCode += '<td>' + GetProtoComboBox( strProto, i ) + '</td>'; strCode += '<td>' + GetPortEdit( 'ext', strPortExt, i ) + '</td>'; strCode += '<td>' + GetPortEdit( 'int', strPortInt, i ) + '</td>'; strCode += '<td>' + GetServerAddrChk( 'chk', 'addr', (strAddr != ""), (strProto != "TCP4"), i ) + '</td>'; strCode += '<td>' + GetServerAddrEdit('addr', strAddr, (strProto != "TCP4"), i ) + '</td>'; strCode += '<td>' + GetDeleteLink(i) + '</td>'; strCode += '</tr>'; } catch(e) { } } } strCode += '</table>'; return strCode; } function EnableRoutedPortList(bCheckBox) { var bEnabled = bCheckBox && bIsAdmin; var elemPortList = null; elemPortList = document.all[ID_ROUTEDPORTLIST]; var Parser = arrParser[2]; OptionList = Parser.GlobalOptions; var oOption = null; try { oOption = OptionList.Get(PROPID_NATPROCESSINGEN); } catch (e) { oOption = OptionList.CreateProperty(); oOption.PropertyID = PROPID_NATPROCESSINGEN; oOption.Type = PT_INT; OptionList.Insert(oOption); } oOption.value = bEnabled ? 1 : 0; if (null != elemPortList) { elemPortList.disabled = !bEnabled; } var i = 0; //disable combo boxes for (i = 0; i < arrCombos.length; i++) document.all[arrCombos[i]].disabled = !bEnabled; //disable delete links for (i = 0; i < arrLinks.length; i++) document.all[arrLinks[i]].disabled = !bEnabled; //disable edit fields for (i = 0; i < arrExtPortEdits.length; i++) document.all[arrExtPortEdits[i]].disabled = !bEnabled; for (i = 0; i < arrIntPortEdits.length; i++) document.all[arrIntPortEdits[i]].disabled = !bEnabled; for (i = 0; i < arrServerAddrChks.length; i++) document.all[arrServerAddrChks[i]].disabled = !bEnabled; for (i = 0; i < arrServerAddrs.length; i++) document.all[arrServerAddrs[i]].disabled = !bEnabled; //disable create button document.all[idCreateButton].disabled = !bEnabled; listGtws.EnableWindow(bEnabled); iRoutedPortListEnabled = bEnabled; } function OnDelete(index) { if (iRoutedPortListEnabled) { arrCombos[index] = ""; Save(); Refresh(); } } function GetNewRPLValue() { var i = 0; var proto, extport, intport; var newVal = ""; var bNeedsDelimiter = false; for (i = 0; i < arrCombos.length; i++) { if (bNeedsDelimiter) { newVal += ','; bNeedsDelimiter = false; } if (arrCombos[i] == "") // deleted item continue; var combo = document.all[arrCombos[i]]; proto = combo.options[combo.selectedIndex].value; var edit = document.all[arrExtPortEdits[i]]; extport = edit.value; edit = document.all[arrIntPortEdits[i]]; intport = edit.value; newVal += proto + ":" + extport + "/" + intport; var chk = document.all[arrServerAddrChks[i]]; if (!chk.disabled && chk.checked) { var editAddr = document.all[arrServerAddrs[i]]; newVal += "@" + editAddr.value; } bNeedsDelimiter = true; } return newVal; } function Save() { var Option, Parser = arrParser[2]; if (Parser == null) { alert("No parser"); } var Option = null; try { Option = Parser.GlobalOptions.Get(PROPID_ROUTEDPORTLIST); } catch (e) { Option = Parser.GlobalOptions.CreateProperty(); Option.Type = PT_STR; Option.PropertyID = PROPID_ROUTEDPORTLIST; Parser.GlobalOptions.Insert(Option); } Option.value = GetNewRPLValue(); } function Refresh() { var Option, Parser = arrParser[2]; if (Parser == null) { alert("No parser"); } var Option = null; try { Option = Parser.GlobalOptions.Get("RoutedPortList"); } catch (e) { } div_table.innerHTML = GetRoutedPortListTable(Option); } function OnAddRow() { var Option, Parser = arrParser[2], OptionList = null; if (Parser == null) { alert("No parser"); } var val = GetNewRPLValue(); if (val != "") val += ","; val += "UDP4:1/1"; var Option = null; OptionList = Parser.GlobalOptions; try { Option = OptionList.Get(PROPID_ROUTEDPORTLIST); } catch (e) { Option = OptionList.CreateProperty(); Option.Type = PT_STR; Option.PropertyID = PROPID_ROUTEDPORTLIST; OptionList.Insert(Option); } Option.value = val; Refresh(); }